001 /*
002 * Copyright 2005 Stephen J. McConnell
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.library.info;
020
021 import java.util.Arrays;
022 import java.util.Properties;
023
024 /**
025 * The LibraryDirective class describes a collection of modules together
026 * with information about type defintions.
027 *
028 * @author <a href="http://www.dpml.net">The Digital Product Meta Library</a>
029 * @version 1.0.0
030 */
031 public final class LibraryDirective extends AbstractDirective
032 {
033 private final ImportDirective[] m_imports;
034 private final ResourceDirective[] m_resources;
035
036 /**
037 * Creation of a new library directive.
038 * @param imports module imports
039 * @param resources the set of declared resources
040 * @param properties library properties
041 */
042 public LibraryDirective(
043 ImportDirective[] imports, ResourceDirective[] resources, Properties properties )
044 {
045 super( properties );
046
047 if( null == imports )
048 {
049 throw new NullPointerException( "imports" );
050 }
051 for( int i=0; i<imports.length; i++ )
052 {
053 if( null == imports[i] )
054 {
055 throw new NullPointerException( "import" );
056 }
057 }
058 if( null == resources )
059 {
060 throw new NullPointerException( "resources" );
061 }
062 for( int i=0; i<resources.length; i++ )
063 {
064 if( null == resources[i] )
065 {
066 throw new NullPointerException( "resource" );
067 }
068 }
069
070 m_resources = resources;
071 m_imports = imports;
072 }
073
074 /**
075 * Return the set of module imports.
076 * @return the module import array
077 */
078 public ImportDirective[] getImportDirectives()
079 {
080 return m_imports;
081 }
082
083 /**
084 * Return the set of module directives.
085 * @return the resource directive array
086 */
087 public ResourceDirective[] getResourceDirectives()
088 {
089 return m_resources;
090 }
091
092 /**
093 * Compare this object with another for equality.
094 * @param other the other object
095 * @return true if equal
096 */
097 public boolean equals( Object other )
098 {
099 if( super.equals( other ) && ( other instanceof LibraryDirective ) )
100 {
101 LibraryDirective object = (LibraryDirective) other;
102 if( !Arrays.equals( m_resources, object.m_resources ) )
103 {
104 return false;
105 }
106 else
107 {
108 return Arrays.equals( m_imports, object.m_imports );
109 }
110 }
111 else
112 {
113 return false;
114 }
115 }
116
117 /**
118 * Compute the hashcode value.
119 * @return the hash value
120 */
121 public int hashCode()
122 {
123 int hash = super.hashCode();
124 hash ^= super.hashArray( m_resources );
125 hash ^= super.hashArray( m_imports );
126 return hash;
127 }
128 }